#ifndef __ZHONG_UUID__
#define __ZHONG_UUID__
// 实现项目的唯一id编号

#include <iostream>
#include <atomic>
#include <sstream>
#include <string>
#include <random>
#include <iomanip>

// 可以结合mac地址来使得uuid更加具有随机性

// 生成16位随机字符的静态函数类
class UUID
{
public:
    static std::string uuid()
    {
        // 生成12位随机16进制字符---作为随机
        std::random_device rd;                                   // 设备随机数对象，用于生成随机数-真随机
        std::mt19937 generator(rd());                            // 以设备随机数为种子，实例化伪随机数对象
        std::uniform_int_distribution<int> distribution(0, 255); // 限制数字范围

        std::stringstream ss;
        for (int i = 0; i < 6; i++)
        {
            if (i == 2 || i == 4)
            {
                ss << "-";
            }
            // 当出现某个数16进制长度为1时，在前面补充一个0
            ss << std::setw(2) << std::setfill('0') << std::hex << distribution(generator);
        }
        ss << "-";
        // 再按顺序生成4位的16进制字符--用作编号
        static std::atomic<short> idx(0);
        short tmp = idx.fetch_add(1);
        ss << std::setw(4) << std::setfill('0') << std::hex << tmp;
        return ss.str();
    }
};
#endif